package com.fc.backingbeans;

import javax.faces.context.FacesContext;

import org.primefaces.context.RequestContext;

/**
 * Lehetséges módok: create, update, delete, view
 * @author Ács Ádám
 *
 */
abstract class AbstractDialog {
	String title
	String mode
	boolean errorState

	boolean isCreateButtonRendered() {
		return mode == 'create'
	}

	boolean isUpdateButtonRendered() {
		return mode == 'update'
	}

	boolean isReadOnly() {
		return mode == 'view' || mode == 'delete'
	}

	/**
	 * Bezárja a dialógust, ha a validációk sikeresek voltak.
	 */
	void close() {
		if (!FacesContext.getCurrentInstance().isValidationFailed() && !errorState) {
			RequestContext.getCurrentInstance().closeDialog(null);
		} 
		errorState = false
	}

	/**
	 * Bezárja a dialógust.
	 */
	void closeSilently() {
		RequestContext.getCurrentInstance().closeDialog(null);
	}

	/**
	 * előhozza a dialógust
	 */
	void show() {
		onShow()
		RequestContext.getCurrentInstance().openDialog(getDialogName(), getOptions(), getParams())
	}

	/**
	 * hook metódus a dialógus megjelenése elé
	 */
	void onShow() {
	}


	abstract String getDialogName()

	/**
	 * RequestContext.getCurrentInstance().openDialog(dialogName, options, params)
	 *  gyerek osztály feladata kitölteni, ha szükséges van options-re
	 */
	Map getOptions() {
		[
			modal: true
			,draggable: false
			,resizable: false
			,contentHeight: 670
			,contentWidth: 720
			,width: 750
			,height: 700
		]
	}

	/**
	 * RequestContext.getCurrentInstance().openDialog(dialogName, options, params)
	 *  gyerek osztály feladata kitölteni, ha szükséges van params-ra
	 */
	Map getParams() {
		return null
	}
}
